/*******************************************************************************
  * 文件：NetComm_DispatchMsg.c
  * 作者：zyz
  * 版本：v1.0.0
  * 日期：2017-08-03
  * 说明：派遣消息
*******************************************************************************/
/* 头文件 *********************************************************************/
#include "NetComm_DispatchMsg.h"
#include "NetComm_Cmd.h"
#include "NetComm_Message.h"
#include "Macro.h"

/* 宏定义 *********************************************************************/
/* 类型定义 *******************************************************************/
/* 变量定义 *******************************************************************/
// 消息处理表
static const NetCommMsgHandler_ts asMsgHandlerTab[] =
{
    // 设置设备状态
    {
        U8_NETCOMM_CMD_01_SET_DEV_STATUS,
        NetComm_SetDevStatusMsg
    },
	// 无效帧
	{
		U8_NETCOMM_CMD_03_INVALID_CMD,
		NetComm_InvalidCMD
	},
    // 确认帧
    {
        U8_NETCOMM_CMD_05_ACK,
        NetComm_AckMsg
    },
    // 停止报警
    {
        U8_NETCOMM_CMD_09_STOP_ALARM,
        NetComm_StopAlarmMsg
    },
    
    // 组命令（未适配）
    // {
    //    U8_NETCOMM_CMD_60_GROUP_CMD,
    //    NetComm_GroupCmdMsg
    // },
    
    // 查询设备版本
    {
        U8_NETCOMM_CMD_61_QUERY_DEV_VER,
        NetComm_QueryDevVerMsg
    },
    // 查询设备识别码
    {
        U8_NETCOMM_CMD_70_QUERY_DEV_ID,
        NetComm_QueryDevIDMsg
    },
    // 查询报警状态
    {
        U8_NETCOMM_CMD_73_QUERY_ALARM_STATUS,
        NetComm_QueryAlarmStatusMsg
    },
    // 配置设备状态汇报
    {
        U8_NETCOMM_CMD_7C_CFG_DEV_STATUS_RPT,
        NetComm_CfgDevStatusRptMsg
    },
    // 应答进入配置模式
    {
        U8_NETCOMM_CMD_F3_REPLY_ENTER_CFG_MODE,
        NetComm_ReplyEnterCfgModeMsg
    },
    // 应答进入工作模式
    {
        U8_NETCOMM_CMD_F5_REPLY_ENTER_WORK_MODE,
        NetComm_ReplyEnterWorkModeMsg
    },
    // 汇报网络状态
    {
        U8_NETCOMM_CMD_F7_RPT_NET_STATUS,
        NetComm_RptNetStatusMsg
    },
    // 请求升级
    {
        U8_NETCOMM_CMD_E1_REQ_UPGRADE,
        NetComm_RequestUpgradeMsg
    },
	// 查询子机信息
	{
		U8_NETCOMM_CMD_E9_QUERY_SLAVE_INFO,
		NetComm_QuerySlaveInfoMsg
	},
	// 查询整机和子机信息
	{
		U8_NETCOMM_CMD_EB_QUERY_MACHINE_INFO,
		NetComm_QueryMachineInfoMsg
	},
};

/* 函数声明 *******************************************************************/
/* 函数定义 *******************************************************************/
/*******************************************************************************
  * 函数名: NetComm_DispatchMsg
  * 功  能：派遣消息
  * 参  数：NetCommPacket_ts* psPacket - 数据包指针
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void NetComm_DispatchMsg(NetCommPacket_ts* psPacket)
{
    U8 u8Index;

    // 获取命令处理表大小
    static U8 u8TabSize = ARRAY_SIZE(asMsgHandlerTab);

    // 遍历处理表
    for(u8Index=0; u8Index < u8TabSize; u8Index++)
    {
        // 找到处理函数
        if(asMsgHandlerTab[u8Index].u8Cmd == psPacket->u8Cmd)
        {
            // 执行处理函数
            if(asMsgHandlerTab[u8Index].pfHandler != (void*)NULL)
            {
                asMsgHandlerTab[u8Index].pfHandler(psPacket->au8Data);
            }
            break;
        }
    }

    // 未找到对应的消息处理函数
    if(u8Index == u8TabSize)
    {
        // 回复无效命令
        NetComm_SendInvalidCmdMsg();
    }
}
